package controller

/**
 * @File : common.go
 * @Description : 公用的结构体
 * @Author : 吴概、陈锴、王帅
 * @Date : 2023/2/1
 */

// Response 所有的response用到的status_code和status_msg都直接嵌套此结构体
type Response struct {
	StatusCode int64  `json:"status_code"`
	StatusMsg  string `json:"status_msg,omitempty"`
}

// Video 视频信息
type Video struct {
	Id            int64  `json:"id" gorm:"primaryKey;autoIncrement"`
	Author        User   `json:"author"`
	PlayUrl       string `json:"play_url" gorm:"type:varchar(2000)"`
	CoverUrl      string `json:"cover_url" gorm:"type:varchar(2000)"`
	FavoriteCount int64  `json:"favorite_count"`
	CommentCount  int64  `json:"comment_count"`
	IsFavorite    bool   `json:"is_favorite"`
	Title         string `json:"title" gorm:"type:varchar(100)"`
	Time          string `gorm:"type:varchar(24)"` //上传时间，视频由此排序
	AuthorId      int64  // 便于数据库查询和存入,存入数据库时会自动保存
}

// User 用户信息
type User struct {
	Id              int64  `json:"id" gorm:"primaryKey;autoIncrement"`
	Name            string `json:"name" gorm:"type:varchar(24)"`
	FollowCount     int64  `json:"follow_count,omitempty" gorm:"type:bigint"`   //关注数
	FollowerCount   int64  `json:"follower_count,omitempty" gorm:"type:bigint"` //粉丝数
	IsFollow        bool   `json:"is_follow,omitempty"`                         //是否关注
	Token           string `gorm:"type:varchar(24)"`                            //Token 就是账号或者email，账号唯一，不能重复
	Password        string `gorm:"type:varchar(24)"`
	Avatar          string `json:"avatar" gorm:"type:varchar(2000)"`           //头像
	BackgroundImage string `json:"background_image" gorm:"type:varchar(2000)"` //用户个人页面大图
	Signature       string `json:"signature" gorm:"type:varchar(200)"`         //个人简介
	TotalFavourited int64  `json:"total_favourited" gorm:"type:bigint"`        //获赞数量
	WorkCount       int64  `json:"work_count" gorm:"type:bigint"`              //作品数量
	FavouriteCount  int64  `json:"favourite_count" gorm:"type:bigint"`         //点赞数量
}

// Comment 评论数据
type Comment struct {
	Id       int64  `json:"id" gorm:"primaryKey;autoIncrement"`
	User     User   `json:"user"`
	Content  string `json:"content" gorm:"varchar(255)"`
	Time     string `json:"create_date" gorm:"type:varchar(24)"` //为了保证排序时同一天的评论能倒序，保存时保存 时:分:秒
	VideoId  int64  //视频id，用于保存于数据库
	UserId   int64  //用户id，用于保存于数据库
	IsDelete bool   `gorm:"default:false"` //是否被删除了
}

// Relation 由于使用了TEXT保存数据，所以单独建个表减少性能损耗
type Relation struct {
	Id           int64  //Id与User的Id一一对应
	FriendList   string `gorm:"type:text"`
	FollowList   string `gorm:"type:text"`
	FollowerList string `gorm:"type:text"`
}

// Publish 存放用户发过的视频，在创建User时需要自动创建User对应的Publish
type Publish struct {
	Id          int64
	PublishList string `gorm:"type:text"`
}

// Like 存储用户喜欢的视频，在创建User时需要自动创建User对应的Publish
// likelist 保存对应视频的 id
type Like struct {
	Id       int64
	LikeList string `gorm:"type:text"`
}

// Chat 聊天历史记录
type Chat struct {
	Id            int64
	Mark          string //好友通过mark来访问聊天记录
	MessageIdList string `gorm:"type:longtext"`
}

// Message 信息
type Message struct {
	Id         int64  `json:"id"`                               // 消息id
	Content    string `json:"content" gorm:"type:varchar(255)"` // 消息内容
	CreateTime int64  `json:"create_time"`                      // 消息发送时间 yyyy-MM-dd HH:MM:ss
	ToUserId   int64  `json:"to_user_id"`
	FromUserId int64  `json:"from_user_id"`
}
